type 属性值的类型，包括:
Color – 表示纯色，使用了RGBA表示法
2D – 代表尺寸为2的幂次的纹理(如2,4,8,16…256,512)
Rect – 代表纹理(texture)，不同于上面的纹理，此处纹理的大小不一定是2的幂次。
Cube – 用于3d中的cube map，经常提到的天空盒就是使用了cube map。
Range(min, max) – 在min和max之间的一个值，在面板中可用滑动条改变其值大小。
Float – 任意一浮点数。
Vector – 4维向量值，本质就是4个浮点数组成的类型。

如果我们的shader很复杂并且需要知道像素的其他相关信息，我们就可以将以下变量包含在输入结构体中，以此来查询其他的相关变量。

float3 viewDir – 视图方向( view direction)值。为了计算视差效果（Parallax effects），边缘光照（rim lighting）等，需要包含视图方向（view direction）值。
float4  with COLOR semantic（比如float4 currentColor，即用户自定义和颜色相关的变量名称） – 每个顶点（per-vertex）颜色的插值。
float4 screenPos – 为了反射效果，需要包含屏幕空间中的位置信息
float3 worldPos – 世界空间中的位置
float3 worldRefl – 世界空间中的反射向量。如果表面着色器(surface shader) 不为SurfaceOutput结构中的Normal赋值，将包含这个参数。
float3 worldNormal – 世界空间中的法线向量(normal vector)。如果表面着色器(surface shader) 不为SurfaceOutput结构中的Normal赋值，将包含这个参数。
INTERNAL_DATA – 相对于上面的float3 worldRefl和float3 worldNormal，如果表面着色器为SurfaceOutput结构中的Normal赋值了，将使用该参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的反射向量(reflection vector)需要使用世界反射向量(WorldReflectionVector (IN, o.Normal))，其中o.Normal表示的是切空间的法向量，而非世界坐标系下的法向量。
struct SurfaceOutput {

    half3 Albedo; //该像素的颜色值

    half3 Normal; //该像素的法向量

    half3 Emission; //该像素的辐射光，辐射光是最简单的一种光，它直接从物体发出并且不受任何光源影响

    half Specular; //该像素的镜面高光

    half Gloss; //该像素的发光强度

    half Alpha; //该像素的透明度

};
Shader"MyShader"{
    Properties{
        _MainTex("Base (RGB)",2D)="white"{}
        _Color("Main Color",Color)=(1,1,1,1)
        
    }
    SubShader{
        Tags{"RenderType"="Opaque"}
        CGPROGRAM
        #pragma surface surf Lambert
        sampler2D _MainTex;
        fixed4 _Color;
        struct Input{
            float2 uv_MainTex;
            
        };
        void surf(Input IN,inout SurfaceOutput o){
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
        }
        ENDCG
    }
    Fallback "Diffuse"
}